﻿using AutoMapper;
using B.S.Domain.Generateplan;
using B.S.Infratrctrue;
using B.S.Requst;
using MediatR;
using Microsoft.EntityFrameworkCore;

namespace B.S.Data.MES.API.Applications.GenerateItemsApplication
{
    /// <summary>
    /// 删除生产计划物品处理器
    /// </summary>
    public class DeleteGenerateItemsCommandHorter : IRequestHandler<DeleteGenerateItemsCommand, APIRequst<int>>
    {
        private readonly IBaseRepository<GenerateItems> _repository;

        public DeleteGenerateItemsCommandHorter(IBaseRepository<GenerateItems> repository)
        {
            _repository = repository;
        }

        public async Task<APIRequst<int>> Handle(DeleteGenerateItemsCommand request, CancellationToken cancellationToken)
        {
            try
            {
                // 查找要删除的物品
                var generateItem = await _repository.GetAll()
                    .Where(x => x.GenerateItemsId == request.GenerateItemsId && x.IsDel == false)
                    .FirstOrDefaultAsync(cancellationToken);

                if (generateItem == null)
                {
                    return new APIRequst<int>
                    {
                        Code = RequstCode.失败,
                        Msg = "物品不存在",
                        Data = 0
                    };
                }

                // 软删除
                generateItem.IsDel = true;
                await _repository.Update(generateItem);

                return new APIRequst<int>
                {
                    Code = RequstCode.成功,
                    Msg = "删除成功",
                    Data = generateItem.GenerateItemsId
                };
            }
            catch (Exception ex)
            {
                return new APIRequst<int>
                {
                    Code = RequstCode.失败,
                    Msg = $"删除失败：{ex.Message}",
                    Data = 0
                };
            }
        }
    }

    /// <summary>
    /// 批量删除生产计划物品处理器
    /// </summary>
    public class BatchDeleteGenerateItemsCommandHorter : IRequestHandler<BatchDeleteGenerateItemsCommand, APIRequst<int>>
    {
        private readonly IBaseRepository<GenerateItems> _repository;

        public BatchDeleteGenerateItemsCommandHorter(IBaseRepository<GenerateItems> repository)
        {
            _repository = repository;
        }

        public async Task<APIRequst<int>> Handle(BatchDeleteGenerateItemsCommand request, CancellationToken cancellationToken)
        {
            try
            {
                if (request.GenerateItemsIds == null || !request.GenerateItemsIds.Any())
                {
                    return new APIRequst<int>
                    {
                        Code = RequstCode.失败,
                        Msg = "请选择要删除的物品",
                        Data = 0
                    };
                }

                // 查找要删除的物品
                var generateItems = await _repository.GetAll()
                    .Where(x => request.GenerateItemsIds.Contains(x.GenerateItemsId) && x.IsDel == false)
                    .ToListAsync(cancellationToken);

                if (!generateItems.Any())
                {
                    return new APIRequst<int>
                    {
                        Code = RequstCode.失败,
                        Msg = "没有找到要删除的物品",
                        Data = 0
                    };
                }

                // 批量软删除
                foreach (var item in generateItems)
                {
                    item.IsDel = true;
                }

                await _repository.UpdateRange(generateItems);

                return new APIRequst<int>
                {
                    Code = RequstCode.成功,
                    Msg = $"成功删除{generateItems.Count}个物品",
                    Data = generateItems.Count
                };
            }
            catch (Exception ex)
            {
                return new APIRequst<int>
                {
                    Code = RequstCode.失败,
                    Msg = $"批量删除失败：{ex.Message}",
                    Data = 0
                };
            }
        }
    }
}
